今天這一篇要介紹o racle 中的PL/SQL , Procedural Language extension to SQL.
其主要功能提供:
1.SQL上程式上的延伸。
2.跨平台與跨產品的使用。
3.高度安全與資料完整性的保護。
4.支援物件導向內容。
PL/SQL 提供一個通用的程式開發環境,可以跨平台與跨硬體,它程式架構包含了if-then,case與loop,也可以宣告常數與變數、定義程序與函式,收集物件的型態與除錯。PL/SQL能被多種語言所使用,包含C、C++與JAVA。
操作者不需要資料需要得資料結構能否被讀取,也不需要知道讀取其他物件的權限,只需要透過呼叫PL/SQL,即可操作資料庫。因為PL/SQL在資料庫內運作,非常適合應運在資料操作密集的操作與網路速度慢的應用系統上。
作為一個DBA ,你可能不需要常常回應系統開發者,如和感上PL/SQL code在資料庫中執行時的loading,也可能不常使用pl/sql撰寫應用程式,但你一定要對於他的物件徹底了解,進而建議開發者如何使用與了解有問題的物件。
PL/SQL物件可以分成許多型態:
1.package:包含一組有邏輯關聯procedures 與 function的集合。通常也稱為specification,
用來描述應用程式的interface。包含宣告的型態、變誤、常數、例外與子程式等,可以使用的內容。
2.package body:完整定義與實作子程式與cursors的內容。
3.type body: 使用者定義的方法的集合(procedures 與 function)。
4.procedure:PL/SQL具體的內容
5.function:一段PL/SQL語法,能利用RETURN語法回傳數值。
6.trigger:觸發程式,能在資料庫部分操作發生時執行。他可以建立在資料表上,像是有資料新增後執行;也可以作為資料庫的事件,如有使用者登入資料庫。
function:
如同我們一般在寫程式,寫部分程式區塊作一些處理,然後回傳其結果。
oracle已經內見許多function在內不可以使用,如SYSDATE, SUM ,AVG..等
其語法範例如下
CREATE OR REPLACE FUNCTION compute_tax(salary NUMBER)
RETURN NUMBER
AS
BEGIN
IF salary < 7000 THEN
RETURN salary * .19
ELSE
RETURN salary * .33
ENDIF;
END;
procedures:
用來執行特定行為,傳遞數值可以使用參數列。
可以在SQL語法中使用CALL呼叫,可以在SQL PLUS使用EXECUTE呼叫,與function相同,可以使用IF-ELSE、CASE與LOOP語法。
package:
為funciton與procedure的群集,進行有效維護管理,每個package應該分成兩個部分。
1.package specification:像是package的header,記錄package的型態與funciton、procedure與變數的定義。
2.package body:funciton、procedure的程式主體。
呼叫方法:package_name.procedure_name (or function_name)
當body被改寫的時候會被重新編義,但其specification不會被影響。
注意事項:
你可以建立specification但不建立body, 但不能建立body不建立specification
在oracle中,已經建立超過350個PL/SQL PACKAGE,主要是提供作為管理與維護的工具與延伸功能。(如DBMS_STATUS、DBMS_OUTPUT...等等)
我們可以使用DESCRIBE的命令檢視子程式。
Triggers:
為一種PL\SQL 程式物件,可以在某些事情執行的時後啟動運作。像是insert資料到 table,登入資料庫,或者常是刪掉資料表或改變設定等等。通常trigger用來呼叫procedure 或funciton,讓trigger的程式碼簡便,而讓其他程式碼放在package中。
多數的DBA會用triggers來檢查資料,加強限制。
triggers能設定在發生前或發生後。
triggers的事件分類:
DML: INSERT, UPDATE, DELETE
DDL: CREATE, DROP,ALTER,GRANT,REVOKE,RENAME
Database:LOGON,LOGOFF,STARTUP,SHUTDOWN,SERVERERROR,SUSPEND
--
寫鐵人寫到睡著...
晚點來補前一天的...
加油,剩下幾天~!!